<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // let set = new Set()
    // console.log(set);
    // console.log(typeof set); // object
    // let set = new Set(1, 2, 3) //number 1 is not iterable
    // 参数：可遍历对象  里面的值不能重复
    let set = new Set([1, 2, 3, [1]])
    console.log(set);
    // 1、add方法添加成员
    set.add(4)
    set.add(2)
    console.log(set);
    // 2、size属性  成员的个数
    console.log(set.size);
    // 3、delete属性  删除属性 成功true 失败 false
    console.log(set.delete(2));
    console.log(set);
    console.log(set.delete([1]));
    console.log(set);

    let arr = [3]
    let arr_1 = [3]
    console.log(arr == arr_1);
    // 4、clear( )方法：清除所有成员
    // set.clear()
    console.log(set);
    // has( )方法：判断set结构中是否含有指定的值。如果有，返回true；如果没有，返回fasle。
    console.log(set.has(1));
    // 5、enteries方法entries( )方法：返回一个键值对的遍历器。
    console.log(set.entries());
    for (let [key, value] of set.entries()) {
        // console.log(key);
        // console.log(value);
    }
    // 6、keys和values方法
    // keys()方法：返回键名的遍历器。
    // values()方法：返回键值的遍历器。
    for (let key of set.keys()) {
        console.log(key);
    }
    // 7、forEach
    set.forEach((item, index) => {
        // console.log(item);
        console.log(index);
    })
</script>
<script>
    // 数组去重
    let arr_2 = [1, 2, 3, 4, 1, 2]
    console.log(arr_2);
    console.log(Array.from(new Set(arr_2)));
    console.log([...new Set(arr_2)]);
</script>
<script>
    // Weakset结构
    // 成员必须是引用类型的值。
    // let weak = new WeakSet([1, 2, 3]) // Invalid value used in weak set
    let weak = new WeakSet([{ name: 'zs' }, [1, 2, 3], set])
    console.log(weak);
    // WeakSet结构也提供了add( ) 方法，delete( ) 方法
    // ，has( )方法给开发者使用，作用与用法跟Set结构完全一致。
    // 不可遍历 没有size属性 entires keys values forEach 没有
</script>

</html>